#include <windows.h>
#include <iostream>
#include <cstdio>
#include "core.h"
using namespace std;

/**
* Puhelinluettelo kirjaston funktioiden toteutukset
*/
namespace Puhelinluettelo
{
	void Luettelo::lisaa(const Henkilo &henkilo)
	{
		rekisteri.kirjoita(henkilo.noudaNimi(), henkilo.noudaNumero());
	}

	void Luettelo::poista(const string &nimi)
	{
		rekisteri.poista(nimi);
	}

	void Luettelo::listaa()
	{
		map<string, string>* kartta = rekisteri.lueKaikki();
		map<string, string>::iterator it;

		for(it=kartta->begin(); it!=kartta->end(); it++)
			printtaa(it->first, it->second);
	}

	bool Luettelo::haeNimella(const string &nimi)
	{
		string numero = rekisteri.lue(nimi);
		if (numero != "")
		{
			printtaa(nimi, numero);
			return true;
		}
		else
			return false;
	}

	bool Luettelo::haeNumerolla(const string &numero)
	{
		map<string, string>* kartta = rekisteri.lueKaikki();
		map<string, string>::iterator it;

		for(it=kartta->begin(); it!=kartta->end(); it++)
		{
			if(it->second == numero)
			{
				printtaa(it->first, it->second);
				return true;
			}
		}
		return false;
	}

	void Luettelo::printtaa(const std::string &nimi, const std::string &numero)
	{
		printf("%-20s%s\n", nimi.c_str(), numero.c_str());
	}

	void Henkilo::asetaNimi(const string &nimi)
	{
		this->nimi = nimi;
	}

	void Henkilo::asetaNumero(const string &numero)
	{
		this->numero = numero;
	}

	string Henkilo::noudaNimi() const
	{
		return nimi;
	}

	string Henkilo::noudaNumero() const
	{
		return numero;
	}
}
